package com.special.threademo.requests151demo;

import java.lang.reflect.Array;

public class DynamicLoad {
    /**
     * 用的必要性，
     * 相比较于 import 的优势
     * 会初始化static 代码块，特别是注册自己，初始化环境等
     */
    public static void main(String[] args) throws ClassNotFoundException {
        // Class.forName("Utils");
        /**
         * 动态创建数组和多维数组的方法
         */
        String[] strs = (String[])
                Array.newInstance(String.class, 8);
        int[][] ints = (int[][])
                Array.newInstance(int.class, 2, 3);
        /**
         * 具体的demo的应用
         */

        Class<?> classType = Class.forName("java.lang.String");
// 创建一个长度为10的字符串数组
        Object array1 = Array.newInstance(classType, 10);
// 把索引位置为5的元素设为"hello"
        Array.set(array1, 5, "hello");
// 获得索引位置为5的元素的值
        String s = (String) Array.get(array1, 5);
        System.out.println(s);
        /**
         * 多维数组
         */
        int[] dims = new int[]{5, 10, 15};
// 创建一个具有指定的组件类型和维度的新数组。
        Object array = Array.newInstance(Integer.TYPE, dims);
// 取出三维数组的第3行，为一个数组
        Object arrayObj = Array.get(array, 3);
        Class<?> cls = arrayObj.getClass().getComponentType();
        System.out.println(cls);

// 取出第3行的第5列，为一个数组
        arrayObj = Array.get(arrayObj, 5);
// 访问第3行第5列的第10个元素，为其赋值37
        Array.setInt(arrayObj, 10, 37);

// 动态数组和普通数组的转换：强行转换成对等的数组
        int arrayCast[][][] = (int[][][]) array;
        System.out.println(arrayCast[3][5][10]);


    }


}

class Utils {
    static {
        System.out.println("Do Something");
    }


}